<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>108_闭包注意的问题</title>
		<script>
			function outter() {
				let someVariable = 'someVariable'
				return function() {
					console.log(someVariable);
				}
			}
			/* 
				闭包的生命周期:
					1.闭包在外部函数调用时才产生，外部函数每次调用都会产生一个全新的闭包.
					2.在内部函数丢失时销毁(内部函数被垃圾回收了，闭包才会消失).
					
				注意事项:
					闭包主要用来隐藏一些不希望被外部访问的内容，
					这就意味着闭包需要占用一定的内存空间
					相较于类来说，闭包比较浪费内存空间(类可以使用原型而闭包不能)，
						需要执行次数较少时，使用闭包。
						需要大量创建实例时，使用类。
			 */
			function outer2() {
				let num = 0
				return () => {
					num++
					console.log(num)
				}
			}
			let fn1 = outer2() //产生一个全新的闭包
			let fn2 = outer2() //产生一个全新的闭包
			fn1()
			fn2()

			fn1 = null;//被赋值为空，闭包消失
			fn2 = null;//被赋值为空，闭包消失
		</script>
	</head>
	<body>
	</body>
</html>